<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8>
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
</head>

<body>
    <div>15-大数相乘</div>
    <script>
        function multiplyBigNum(num1, num2) {
            // 判断输入是不是数字
            if (isNaN(num1) || isNaN(num2)) return '';
             if (num1 === 0 || num2 === 0) return 0;
            
             num1 = num1 + ''
            num2 = num2 + ''

            let len1 = num1.length,
                len2 = num2.length
            let pos = []

            // j放外卖呢  先固定被乘数的以为  分别去乘乘数的每一位 更符合竖式演算法
            for (let j = len2 - 1; j >= 0; j--) {
                for (let i = len1 - 1; i >= 0; i--) {
                    // 两个个位数相乘 最多产生两位数  index1表示十位数   index2表示个位
                    let index1 = i + j,
                        index2 = i + j + 1
                    // 相乘并加上 上一个的进位以及上一轮循环后的值
                    let mul = num1[i] * num2[j] + (pos[index2] || 0)
                    // 保留十位 并和上一轮的进位相加 表示给位置上现在的数
                    pos[index1] = Math.floor(mul / 10) + (pos[index1] || 0)
                    // 保留各位
                    pos[index2] = mul % 10
                }
            }

            let result = pos.join("").replace(/^0+/, '')
            return result - 0 || '0'
        }
        console.log(multiplyBigNum(100,222))
    </script>
</body>

</html>